package controllers

import (
	"database/sql"

	"github.com/astaxie/beego"
	_ "github.com/go-sql-driver/mysql"
)
type MysqlController struct {
	beego.Controller
}


// 创建表
func createTable (db *sql.DB) {
	_, err := db.Exec(`
		CREATE TABLE IF NOT EXISTS ly_stu (
			id INT UNSIGNED AUTO_INCREMENT,
			name VARCHAR(100) NOT NULL,
			classroom VARCHAR(100),
			PRIMARY KEY (id)
		)ENGINE=InnoDB DEFAULT CHARSET=utf8
	`)
	if err != nil {
		beego.Info("执行语句失败", err)
		return
	}
}

// 添加数据
func addItem(db *sql.DB) {
	stmt, err := db.Prepare("INSERT ly_stu SET name=?,classroom=?")
	if err != nil {
		beego.Info("执行语句失败", err)
		return
	}
	res, err := stmt.Exec("jery", "三一班")
	if err != nil {
		beego.Info("添加数据失败", err)
		return
	}
	id, err := res.LastInsertId()
	if err != nil {
		beego.Info("添加数据失败", err)
		return
	}
	beego.Info("id: ", id)
}

// 删除数据
func deleteItem(db *sql.DB) {
	stmt, err := db.Prepare("DELETE FROM ly_stu WHERE id=?")
	if err != nil {
		beego.Info("执行语句失败", err)
		return
	}
	res, err := stmt.Exec(1)
	if err != nil {
		beego.Info("删除数据失败", err)
		return
	}
	num, err := res.RowsAffected()
	if err != nil {
		beego.Info("删除数据失败", err)
		return
	}
	beego.Info("删除数据成功", num)
}

// 查询数据
func queryList(db *sql.DB) {
	rows, err := db.Query("SELECT id, name, classroom FROM ly_stu")
	if err != nil {
		beego.Info("执行语句失败", err)
		return
	}
	var id int
	var name string
	var classroom string
	for rows.Next(){
		rows.Scan(&id, &name, &classroom)
		beego.Info(id, name, classroom)
	}
}

// 更新数据
func updateItem(db *sql.DB) {
	stmt, err := db.Prepare("UPDATE ly_stu SET name=? WHERE id=?")
	if err != nil {
		beego.Info("执行语句失败", err)
		return
	}
	res, err := stmt.Exec("tom", 2)
	if err != nil {
		beego.Info("执行语句失败", err)
		return
	}
	id, err := res.RowsAffected()
	if err != nil {
		beego.Info("更新数据失败", err)
		return
	}
	beego.Info("更新数据成功", id)
}

func (m *MysqlController) ShowMysql() {
	// 数据库连接
	db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/go_demo?charset=utf8")
	
	if err != nil {
		beego.Info("数据库链接失败", err)
		return
	}
	defer db.Close()

	err = db.Ping()
	if err != nil{
		beego.Info("数据库链接失败", err)
		return
	}
	item := 556;
	if item == 0 {
		// 创建表
		createTable(db)
		m.Ctx.WriteString("创建表成功")
	} else if item == 1 {
		// 增
		addItem(db);
		m.Ctx.WriteString("添加数据成功")
	} else if item == 2 {
		// 删
		deleteItem(db)
		m.Ctx.WriteString("删除数据成功")
	} else if item == 3 {
		// 改
		updateItem(db)
		m.Ctx.WriteString("更新数据成功")
	} else {
		// 查
		queryList(db)
		m.Ctx.WriteString("查询数据成功")
	}
}